home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / MacHacksBug / Python 1.5.2c1 / Mac / Tools / macfreeze / macfreezegui.py < prev    next >
Encoding:
Python Source  |  2000-06-23  |  4.1 KB  |  159 lines

  1. """macfreezegui - The GUI for macfreeze"""
  2. import Dlg
  3. import macfs
  4. import EasyDialogs
  5. import sys
  6. import os
  7. import string
  8. import Res
  9.  
  10. ID_MAINDIALOG=512
  11.  
  12. ITEM_SCRIPTNAME=2
  13. ITEM_SCRIPTBROWSE=3
  14. ITEM_GENSOURCE=4
  15. ITEM_GENSOURCE_ITEMS=(7,)
  16. ITEM_SOURCEDIRNAME=6
  17. ITEM_SOURCEDIRBROWSE=7
  18. ITEM_GENRESOURCE=8
  19. ITEM_GENRESOURCE_ITEMS=(11,)
  20. ITEM_RESOURCENAME=10
  21. ITEM_RESOURCEBROWSE=11
  22. ITEM_GENAPPLET=12
  23. ITEM_GENAPPLET_ITEMS=(15,)
  24. ITEM_APPLETNAME=14
  25. ITEM_APPLETBROWSE=15
  26. ITEM_OK=16
  27. ITEM_CANCEL=17
  28. ITEM_DEBUG=19
  29. ITEM_GENINFO=20
  30.  
  31. RADIO_GROUPING={
  32.     ITEM_GENSOURCE: ITEM_GENSOURCE_ITEMS,
  33.     ITEM_GENRESOURCE: ITEM_GENRESOURCE_ITEMS,
  34.     ITEM_GENAPPLET: ITEM_GENAPPLET_ITEMS,
  35.     ITEM_GENINFO: ()
  36. }
  37.  
  38. def dialog(script=None):
  39.  
  40.     # Invent the various names
  41.     if not script:
  42.         fss, ok = macfs.PromptGetFile("Script?", "TEXT")
  43.         if not ok:
  44.             sys.exit(0)
  45.         script = fss.as_pathname()
  46.     basename, ext = os.path.splitext(script)
  47.     if ext:
  48.         appletname = basename
  49.         rsrcname = basename + 'modules.rsrc'
  50.     else:
  51.         appletname = script + '.applet'
  52.         rsrcname = script + 'modules.rsrc'
  53.     dirname, basebase = os.path.split(basename)
  54.     dirname = os.path.join(dirname, 'build.'+basebase)
  55.     
  56.     # Get the dialog, possibly opening the resource file (if needed)
  57.     try:
  58.         d = Dlg.GetNewDialog(ID_MAINDIALOG, -1)
  59.     except Dlg.Error:
  60.         d = None
  61.     if d == None:
  62.         try:
  63.             Res.OpenResFile('macfreeze.rsrc')
  64.         except Res.Error:
  65.             d = None
  66.         else:
  67.             d = Dlg.GetNewDialog(ID_MAINDIALOG, -1)
  68.     if d == None:
  69.         EasyDialogs.Message("Dialog resource not found or faulty")
  70.         sys.exit(1)
  71.     
  72.     # Fill the dialog
  73.     d.SetDialogDefaultItem(ITEM_OK)
  74.     d.SetDialogCancelItem(ITEM_CANCEL)
  75.     
  76.     _dialogsetfile(d, ITEM_SCRIPTNAME, script)
  77.     _dialogsetfile(d, ITEM_SOURCEDIRNAME, dirname)
  78.     _dialogsetfile(d, ITEM_RESOURCENAME, rsrcname)
  79.     _dialogsetfile(d, ITEM_APPLETNAME, appletname)
  80.  
  81.     gentype = ITEM_GENSOURCE
  82.     _dialogradiogroup(d, ITEM_GENSOURCE)
  83.  
  84.     # Interact
  85.     d.GetDialogWindow().SetWTitle("Standalone application creation options")
  86.     d.GetDialogWindow().ShowWindow()
  87.     d.DrawDialog()
  88.     while 1:
  89.         item = Dlg.ModalDialog(None)
  90.         if item == ITEM_OK:
  91.             break
  92.         elif item == ITEM_CANCEL:
  93.             sys.exit(0)
  94.         elif item in RADIO_GROUPING.keys():
  95.             gentype = item
  96.             _dialogradiogroup(d, item)
  97.         elif item == ITEM_SCRIPTBROWSE:
  98.             fss, ok = macfs.PromptGetFile("Script?")
  99.             if ok:
  100.                 script = fss.as_pathname()
  101.                 _dialogsetfile(d, ITEM_SCRIPTNAME, script)
  102.         elif item == ITEM_SOURCEDIRBROWSE:
  103.             fss, ok = macfs.StandardPutFile("Output folder name", os.path.split(dirname)[1])
  104.             if ok:
  105.                 dirname = fss.as_pathname()
  106.                 _dialogsetfile(d, ITEM_SOURCEDIRNAME, dirname)
  107.         elif item == ITEM_RESOURCEBROWSE:
  108.             fss, ok = macfs.StandardPutFile("Resource output file", os.path.split(rsrcname)[1])
  109.             if ok:
  110.                 rsrcname = fss.as_pathname()
  111.                 _dialogsetfile(d, ITEM_RESOURCENAME, rsrcname)
  112.         elif item == ITEM_APPLETBROWSE:
  113.             fss, ok = macfs.StandardPutFile("Applet output file", os.path.split(appletname)[1])
  114.             if ok:
  115.                 appletname = fss.as_pathname()
  116.                 _dialogsetfile(d, ITEM_APPLETNAME, appletname)
  117.         else:
  118.             pass
  119.     tp, h, rect = d.GetDialogItem(ITEM_DEBUG)
  120.     debug = Dlg.GetDialogItemText(h)
  121.     try:
  122.         debug = string.atoi(string.strip(debug))
  123.     except ValueError:
  124.         EasyDialogs.Message("Illegal debug value %s, set to zero."%`debug`)
  125.         debug = 0
  126.     if gentype == ITEM_GENSOURCE:
  127.         return 'source', script, dirname, debug
  128.     elif gentype == ITEM_GENRESOURCE:
  129.         return 'resource', script, rsrcname, debug
  130.     elif gentype == ITEM_GENAPPLET:
  131.         return 'applet', script, appletname, debug
  132.     elif gentype == ITEM_GENINFO:
  133.         return 'info', script, '', debug
  134.     raise 'Error in gentype', gentype
  135.  
  136. def _dialogradiogroup(d, item):
  137.     for k in RADIO_GROUPING.keys():
  138.         subitems = RADIO_GROUPING[k]
  139.         tp, h, rect = d.GetDialogItem(k)
  140.         if k == item:
  141.             h.as_Control().SetControlValue(1)
  142.             for i2 in subitems:
  143.                 d.ShowDialogItem(i2)
  144.         else:
  145.             h.as_Control().SetControlValue(0)
  146.             for i2 in subitems:
  147.                 d.HideDialogItem(i2)
  148.  
  149. def _dialogsetfile(d, item, file):
  150.     if len(file) > 32:
  151.         file = '\311:' + os.path.split(file)[1]
  152.     tp, h, rect = d.GetDialogItem(item)
  153.     Dlg.SetDialogItemText(h, file)
  154.             
  155. if __name__ == '__main__':
  156.     type, script, file, debug = dialog()
  157.     print type, script, file, 'debug=%d'%debug
  158.     sys.exit(1)
  159.